class Location;

#ifndef LOCATION_H
#define LOCATION_H

#include <string>
#include <vector>
#include "party.h"
#include "NPC.h"
#include "monster.h"
#include "hero.h"

class Location
{
public:
    Location(std::string name, int x,int y,char DS='-');
    ~Location();

    int GetX() { return _x; }
    int GetY() { return _y; }
    std::string getName() {return _name;} //chris change
    //bool criticalOccurred() {return _critical;} //chris change
    //void setCriticalStat(bool status){ _critical = status;} //chris change
    //int getCriticalEvent() {return _critcode;} //chris change
    //void setCritivalEvent(int code) {_critcode = code;} //chris change


    void SetNPC(NPC npc) { _npc=npc; }
    NPC* GetNPC();

    Party *GetParty() { return _monster_party; }

    virtual void OnArrival(Party* party);

    char DS;

protected: //chris change
    NPC _npc;
    // I used a pointer here because of some stupid include errors.
    Party *_monster_party;
    std::string _name;
    int _x,_y;
    //bool _critical; //notes if critical event occurred yet... chris change
    //int _critcode; //code for critical event, 0 if nothing... chris change

};

class Town : public Location
{
public:
    Town(std::string name,int x,int y);
    ~Town();

private:
};

class Castle : public Location
{
public:
    Castle(std::string name,int x,int y);
    ~Castle();

private:
};

class AddTown : public Location
{
public:
    AddTown(std::string name,int x,int y); //make addedgirl false
    ~AddTown();

    void OnArrival(Party* prty);

private:
    bool added_girl;
};

class MagicForestEntrance : public Location
{
public:
    MagicForestEntrance(std::string name,int x,int y);
    ~MagicForestEntrance();

    void OnArrival(Party* party)
    {
        //loop here

    }
};

#endif
